package com.dtflys.forest.example.amap.client;

import com.dtflys.forest.annotation.BaseRequest;
import com.dtflys.forest.annotation.Get;
import com.dtflys.forest.annotation.LogEnabled;
import com.dtflys.forest.annotation.LogHandler;
import com.dtflys.forest.example.amap.forest.AmapResultLogHandler;
import com.dtflys.forest.example.amap.vo.GeoResultVo;
import com.dtflys.forest.example.amap.vo.RegeoResultVo;


/**
 * 高德地图服务客户端接口
 * @author gongjun
 */
@BaseRequest(baseURL = "https://restapi.amap.com/#{amap.version}")
@LogEnabled(logResponseContent = true)
@LogHandler(AmapResultLogHandler.class)
public interface AmapClient {

    /**
     * 根据城市和地址信息查询地理编码
     * <p>
     * 高德官方文档: https://lbs.amap.com/api/webservice/guide/api/georegeo/#geo
     *
     * @param address 结构化地址信息
     * @param city 城市
     * @return 地理编码结果
     */
    @Get("/geocode/geo?address={0}&city={1}&output=JSON&key=#{amap.key}")
    GeoResultVo findGeocodeByAddress(String address, String city);


    /**
     * 根据地址信息查询地理编码
     * <p>
     * 高德官方文档: https://lbs.amap.com/api/webservice/guide/api/georegeo/#geo
     *
     * @param address 结构化地址信息
     * @return 地理编码结果
     */
    @Get("/geocode/geo?address={0}&output=JSON&key=#{amap.key}")
    GeoResultVo findGeocodeByAddress(String address);

    /**
     * 根据经纬度查逆地理编码
     * <p>
     * 高德官方文档: https://lbs.amap.com/api/webservice/guide/api/georegeo/#rego
     *
     * @param latitude 经度
     * @param longitude 纬度
     * @param radius 搜索半径
     * @return 地理编码结果
     */
    @Get("/geocode/regeo?output=xml&location={0},{1}&key=#{amp.key}&radius={2}&extensions=all")
    RegeoResultVo findRegeocode(String latitude, String longitude, Integer radius);

}
